package models

import (
	"context"
	"go-chain-api/global"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo/options"
)

type SwapTransactionInfo struct {
	ChainName    string `bson:"chainName"`
	ChainID      uint   `bson:"chainId"`      // 链的唯一标识符
	Sender       string `bson:"sender"`       // 触发交换的地址-合约地址
	From         string `bson:"from"`         // 交易发起地址
	Amount0In    string `bson:"amount0In"`    // Token0输入的数量
	Amount1In    string `bson:"amount1In"`    // Token1输入的数量
	Amount0Out   string `bson:"amount0Out"`   // Token0输出的数量
	Amount1Out   string `bson:"amount1Out"`   // Token1输出的数量
	Value        string `bson:"value"`        // 成交量
	Price        string `bson:"price"`        // 成交价
	Type         int    `bson:"type"`         // 1买2卖
	To           string `bson:"to"`           // 接收输出代币的地址
	Timestamp    int64  `bson:"timestamp"`    // 时间戳
	TokenAddress string `bson:"tokenAddress"` // 代币地址
	BlockNumber  uint64 `bson:"blockNumber"`
}

type SwapInfo struct {
	Id            string `bson:"_id,omitempty" json:"id"`
	Address       string `bson:"address" `      // 交易对智能合约地址
	Token0Address string `bson:"token0Address"` // 交易对中第一个代币的地址
	Token1Address string `bson:"token1Address"` // 交易对中第二个代币的地址
	Token0Name    string `bson:"token0Name"`    // 交易对中第一个代币的名称
	Token1Name    string `bson:"token1Name"`    // 交易对中第二个代币的名称
	Factory       string `bson:"factory"`       // 交易对所属的工厂地址
	ChainId       uint   `bson:"chainId"`
	ChainName     string `bson:"chainName"`
}
type PoolTxList struct {
	ChainId    uint   `bson:"chainId"`
	ChainName  string `bson:"chainName"`
	Token0Name string `bson:"token0Name"`
	Token1Name string `bson:"token1Name"`
	Sender     string `bson:"sender"`     // 触发交换的地址-合约地址
	From       string `bson:"from"`       // 交易发起地址
	Amount0In  string `bson:"amount0In"`  // Token0输入的数量
	Amount1In  string `bson:"amount1In"`  // Token1输入的数量
	Amount0Out string `bson:"amount0Out"` // Token0输出的数量
	Amount1Out string `bson:"amount1Out"` // Token1输出的数量
	Value      string `bson:"value"`      // 成交量
	Price      string `bson:"price"`      // 成交价
	Type       int    `bson:"type"`       // 1买2卖
	To         string `bson:"to"`         // 接收输出代币的地址
	Timestamp  int64  `bson:"timestamp"`  // 时间戳
}

func GetListByAddress(toAddress string, pageIndex uint, pageSize uint) ([]SwapTransactionInfo, error) {
	var list []SwapTransactionInfo
	findOptions := options.Find()
	findOptions.SetSkip(int64(pageIndex))
	findOptions.SetLimit(int64(pageSize))
	swapClient := global.DBEngine.Database(global.DbConfig.DbName).Collection("swap_transaction_info")
	find, _ := swapClient.Find(context.Background(), bson.M{"to": toAddress}, findOptions)
	err := find.All(context.Background(), &list)
	return list, err
}
